package mysql8学习.高级.第08章_索引的创建和设计原则;

/**
 *
 * 索引是一把双刃剑，可提高查询效率,但也会降低插入和更新的速度并占用磁盘空间。
 * 选择索弓的最终目的是为了使查询的速度变快，
 * 上面给出的原则是 最基本的准则，但不能拘泥于上面的准则，
 * 大家要在以后的学习和工作中进行不断的实践，根据应用的实际情况进行分析和判断，
 * 选择最合适的索引方式。
 *
 */
public class F_索引的设置原则之不适合索引 {
}

/**
 * 哪些情况不适合创建索引
 *
 * 1.在where中使用不到的字段，不要设置索引
 *   WHERE条件(包括GROUP BY、ORDER BY)里用不到的字段不需要创建索引，
 *   索弓的价值是快速定位，如果起不到定位的字段通常是不需要创建索引的。举个例子:
 * 2.数据量小的表最好不要使用索引
 *   结论:在数据表中的数据行数比较少的情况下，比如不到1000行，是不需要创建索引的。
 * 3.有大量重复数据的列上不要建立索引  如性别
 *   如果   100万人   10个男的  其他都是女的  查找所有男性的话  会提升效率
 *  结论:当数据重复度大，比如高于10% 的时候，也不需要对这个字段使用索引。
 *
 * 4.避免对经常更新的表创建过多的索引
 * 第一层含义:频繁更新的字段不一定要创建索引。
 *          因为更新数据的时候，也需要更新索引，
 *          如果索引太多,在更新索弓|的时候也会造成负担，从而影响效率。
 * 第二层含义:避免对经常更新的表创建过多的索引，并且索引中的列尽可能少。
 *          此时，虽然提高了查询速度,同时却会降低更新表的速度。
 * 5.不建议用无序的值作为索引
 * 例如身份证、UUID(在索引比较时需要转为 ASCll, 并且插入时可能造成页分裂)、
 *     MD5、HASH、无序长字符串等。
 * 6.删除不再使用或者很少使用的索引
 * 表中的数据被大量更新，或者数据的使用方式被改变后,原有的一-些索引可能不再需要。
 * 数据库管理员应当定期找出这些索引，将它们删除，从而减少索引对更新操作的影响。|
 *
 * 7.不要定义冗余或重复的索引
 *   有时候有意或者无意的就对同一个列创建了多个索引，
 *   比如: index(a,b,c)相当于index(a)、index(a,b) 、index(a,b,c)。
 *   ②重复索引
 *
 *
 */
/**
 * 3.5小结
 * 索引是一把双刃剑，可提高查询效率,但也会降低插入和更新的速度并占用磁盘空间。
 * 选择索弓的最终目的是为了使查询的速度变快，
 * 上面给出的原则是 最基本的准则，但不能拘泥于上面的准则，
 * 大家要在以后的学习和工作中进行不断的实践，根据应用的实际情况进行分析和判断，
 * 选择最合适的索引方式。
 *
 */